Crime Data Analysis

Author

Ju & Tim

Published

November 8, 2024

Crime Data Analysis

Data: https://catalog.data.gov/dataset/crime-data-from-2020-to-present

About Data: https://data.lacity.org/Public-Safety/Crime-Data-from-2020-to-Present/2nrs-mtv8/about_data

Anmerkung: Mögliche Ungenauigkeiten, da die Daten von Papier Akten übertragen wurden

OCC = Occurrence

0. Beschreibung des Datensatzes

Crime Data Datensatz aus Los Angeles, USA

Zeitraum: 2020-2024

Beinhaltet

  • Location

  • Modus Operandi

    • zB Täterbeschreibung, ..
  • Zeitpunkt

  • Tatwaffen

  • Opferbeschreibung

    • Geschlecht,

    • Abstammung

    • Alter

  • Tatbeschreibung (Kategorien)

  • Tatbestände (bis zu 4 -> crime codes)

1. Definition/Formulierung der Fragestellung

Aufgabenstellung (10 Pkt.) X

Definieren Sie eine Sie interessierende bzw. interessante Fragestellung im Zusammenhang mit dem Datensatz:

  • Was interessiert Sie an dem Datensatz? X
  • Welche spezifische Fragestellung würden Sie gern mit Hilfe des Datensatzes beantworten? X
  • Was erwarten Sie, angesichts Ihrer Fragestellung, bezüglich des Datensatzes? X
  • Welche Klassen von Straftaten werden wie häufig begangen?
    • Anzahl Proportional zu Schweregrad
    • Viele Diebstahle & andere Straftaten um Geld zu beschaffen
  • Welche Stadtteile sind besonders betroffen?
    • Ärmere Stadtteile
    • Stadtteile mit Gang Gebieten
  • Welche Stadtteile haben besonders viele Straftaten mit Gang Einfluss?
    • Kenne mich zu schlecht in LA aus
    • Nicht Downtown & Beverly Hills (wohlhabendere Gegenden)
  • Welche Bevölkerungsgruppe ist am meisten gefährdet? (Abhängig von Alter, Geschlecht, Abstammung)
    • Junge Männer Schwarzer/Hispanischer Abstammung (weniger Wohlhaben + Gangs)
    • Junge weiße Frauen bei Sexualstraftaten
  • Gibt es besonders Gefährliche Arten von Orten ([Premise Desc])
    • Motels, Parking Lot, Street
    • Internet aka. Cyberspace
  • Welche Arten von Waffen wird am meisten genutzt?
    • Meistens nur unbewaffnet
    • Recht viele Schusswaffen
  • Wie viel Prozent haben zu Verhaftungen (und welcher Art) geführt?
    • Hoffentlich über 80%
  • Gibt es zeitliche Rahmen in denen mehr oder weniger Verbrechen geschehen?
    • Am meisten am Abend/in der Nacht
    • Anfang/Ende des Monats mehr Diebstahl/Raub? –> Gehalt auszahlung Diebstahl usw.?
    • Wochenenden -> Party etc
    • Sommer -> Menschen drehen bei Hitze durch
    • Dunkle Jahreszeiten -> Schutz in der Dunkelheit
  • Wie effektiv ist die LAPD bei der Aufklärung verschiedener Arten von Straftaten?
    • Straftaten mit direktem Opfer mehr (Zeugen vorhanden)
  • Welche Straftaten werden häufig am Anfang/Ende des Monats begangen?
    • Gehalt auszahlung Diebstahl usw.?
  • Wie hat sich die Kriminalität über die 3 Jahre verändert?
    • In Corona deutlich abgenommen, ansonsten zugenommen
  • Wie häufig werden welche Bevölkerungsgruppen angezeigt / vgl zu wie viele Leute welcher Bevölkerungsgruppe wohnen dort?
    • Nicht in Datensatz glaube

2. Laden der Daten

Aufgabenstellung (10 Pkt.)

Laden Sie die Daten in die R-Sitzung und verschaffen Sie sich einen ersten Überblick

  • Welche Typen sind enthalten? X

  • Ist sichergestellt, dass alle Daten den richtigen Type haben? X

  • Haben die Daten irgendwelche “Seltsamkeiten” mit denen Sie umgehen müssen, wie z.B. anders codierte NA’s, mehrere Tabellen, … etc. #

  • Je nach Datensatz können Sie die Daten auch in eine Datenbank laden und dann auf diese in R zugreifen. X

Beschreiben Sie, was Sie tun müssen, bevor Sie die Daten im nächsten Abschnitt aufbereiten und bearbeiten können!

rm(list=ls())

# Laden der Daten
library(readr)
crimes.df.raw <- read_csv('Crime_Data_from_2020_to_Present.csv') 
Warning: One or more parsing issues, call `problems()` on your data frame for details,
e.g.:
  dat <- vroom(...)
  problems(dat)
Rows: 986500 Columns: 28
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (16): Date Rptd, DATE OCC, TIME OCC, AREA, AREA NAME, Rpt Dist No, Crm C...
dbl (11): DR_NO, Part 1-2, Crm Cd, Vict Age, Premis Cd, Weapon Used Cd, Crm ...
lgl  (1): Crm Cd 4

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(crimes.df.raw)
# A tibble: 6 × 28
      DR_NO `Date Rptd`    `DATE OCC` `TIME OCC` AREA  `AREA NAME` `Rpt Dist No`
      <dbl> <chr>          <chr>      <chr>      <chr> <chr>       <chr>        
1 190326475 03/01/2020 12… 03/01/202… 2130       07    Wilshire    0784         
2 200106753 02/09/2020 12… 02/08/202… 1800       01    Central     0182         
3 200320258 11/11/2020 12… 11/04/202… 1700       03    Southwest   0356         
4 200907217 05/10/2023 12… 03/10/202… 2037       09    Van Nuys    0964         
5 220614831 08/18/2022 12… 08/17/202… 1200       06    Hollywood   0666         
6 231808869 04/04/2023 12… 12/01/202… 2300       18    Southeast   1826         
# ℹ 21 more variables: `Part 1-2` <dbl>, `Crm Cd` <dbl>, `Crm Cd Desc` <chr>,
#   Mocodes <chr>, `Vict Age` <dbl>, `Vict Sex` <chr>, `Vict Descent` <chr>,
#   `Premis Cd` <dbl>, `Premis Desc` <chr>, `Weapon Used Cd` <dbl>,
#   `Weapon Desc` <chr>, Status <chr>, `Status Desc` <chr>, `Crm Cd 1` <dbl>,
#   `Crm Cd 2` <dbl>, `Crm Cd 3` <dbl>, `Crm Cd 4` <lgl>, LOCATION <chr>,
#   `Cross Street` <chr>, LAT <dbl>, LON <dbl>
# Welche Typen sind enthalten?
sapply(crimes.df.raw, class)
         DR_NO      Date Rptd       DATE OCC       TIME OCC           AREA 
     "numeric"    "character"    "character"    "character"    "character" 
     AREA NAME    Rpt Dist No       Part 1-2         Crm Cd    Crm Cd Desc 
   "character"    "character"      "numeric"      "numeric"    "character" 
       Mocodes       Vict Age       Vict Sex   Vict Descent      Premis Cd 
   "character"      "numeric"    "character"    "character"      "numeric" 
   Premis Desc Weapon Used Cd    Weapon Desc         Status    Status Desc 
   "character"      "numeric"    "character"    "character"    "character" 
      Crm Cd 1       Crm Cd 2       Crm Cd 3       Crm Cd 4       LOCATION 
     "numeric"      "numeric"      "numeric"      "logical"    "character" 
  Cross Street            LAT            LON 
   "character"      "numeric"      "numeric" 

Einlesen der Modus Operandi Codes

library(tidyr)
library(dplyr)

Attache Paket: 'dplyr'
Die folgenden Objekte sind maskiert von 'package:stats':

    filter, lag
Die folgenden Objekte sind maskiert von 'package:base':

    intersect, setdiff, setequal, union
mocodes.df.dirty <- read_delim("MO_CODES_Numerical_20191119.txt",
                 delim = "\\s+",
                 col_names = c("CodeBeschreibung"),
                 trim_ws = TRUE)
Rows: 824 Columns: 1
── Column specification ────────────────────────────────────────────────────────
Delimiter: "\\s+"
chr (1): CodeBeschreibung

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
mocodes.df <- mocodes.df.dirty %>%
  separate(CodeBeschreibung,
           into = c("Code", "Beschreibung"),
           sep = "(?<=[0-9])\\s+",
           extra = "merge") %>%
  mutate(Code = as.integer(Code)) 

Analyse Rohdaten

  • Modus Operandi –> richtige Nummern zum zuordnen mit der Tabelle von MO-Codes

  • Datum Format

  • Es existieren NAs in manchen Spalten

  • Nummern als String –> Nummern

In manchen Spalten befinden sich NAs, dazu gehören:

  • Weapon

  • Weapon Descd

  • Crime Codes –> nicht alle Taten

Überprüfung Aussagen der Metadaten:

  • Crm Cd should be the same as Crm Cd 1

    Crm Cd 1 sollte die gleichen Werte wie Crm Cd haben:

    Crm Cd Indicates the crime committed. (Same as Crime Code 1)

    Es gibt aber 1956 unterschiedliche Werte –> todo analyse später

  • Part 1-2 Weg löschen ?!

  • Area = Area Name ?!

  • Premise Cd = Premise Desc ?!

  • Weapon Use Cd = Weapon Desc ?!

3. Transformation & Bearbeitung

Aufgabenstellung (15 Pkt.)
  • Umcodierung von Daten, z.B. numerisch in kategorial

  • Subsetting der Daten

  • Joining von Datentabellen - falls nötig. Welcher Join ist notwendig? Warum?

  • Übersicht der transformierten Daten. Sie können hierzu Hilfsmittel wie glimpse(), skim() und head() benutzen, um Ihre Erläuterungen zu veranschaulichen.

Sind die sich ergebenden Daten so, wie Sie es erwartet haben? Warum oder warum nicht?

Aufbereitung / Umcodierung

# Aufbereitung der Liste mit Codes zur Zuordnung der Modus Operandi
codes_to_numeric <- function(x) {
  if (is.na(x)) {
    return(NA)
  } else {
    return(as.numeric(strsplit(x, " ")[[1]]))
  }
}

# Transformation der Daten zu sinnvollen Datentypen
crimes.df <- transform(crimes.df.raw,
    `Date Rptd` = as.Date(substr(`Date Rptd`, 1, 10), format = "%m/%d/%Y"),
    `DATE OCC` = as.Date(substr(`DATE OCC`, 1, 10), format = "%m/%d/%Y"),
    `TIME OCC` = as.integer(`TIME OCC`),
    `AREA` = as.integer(`AREA`),
    `Rpt Dist No` = as.integer(`Rpt Dist No`),
    `Crm Cd` = as.integer(`Crm Cd`),
    `Mocodes` = lapply(Mocodes, codes_to_numeric)
)
crmCd.diff <- which(crimes.df["Crm Cd"] != crimes.df["Crm Cd 1"])
length(crmCd.diff)
[1] 1956
# Überprüfen, ob die Spalte nur NAs enthält
if (all(is.na(crimes.df[["Crm Cd 4"]]))) {
  crimes.df[["Crm Cd 4"]] <- NULL
}
# Löschen von Part 1-2
# Todo Begründung
crimes.df[["Part 1-2"]] <- NULL

Joining

  • MO & Tabelle
library(purrr)

crimes.df.joined <- crimes.df %>% 
  mutate(`MoCd Desc` = map(Mocodes, ~ mocodes.df$Beschreibung[match(.x, mocodes.df$Code)])) %>%
  relocate(`MoCd Desc`, .after = `Mocodes`)

# Make Lists readable (comma seperated)
#crimes.df.joined %>%
#   mutate(
#     codes_str = map_chr(Mocodes, ~ paste(.x, collapse = ", ")),
#     meanings_str = map_chr(`MoCd Desc`, ~ paste(.x, collapse = ", "))
#   ) %>%
#   select(DR_NO, codes_str, meanings_str) %>%
#   View()

Subsetting

  • Area

  • Geschlecht

  • Abstammung

  • Art des Crimes

Übersicht des Dataframes

Fazit - Transformation & Bearbeitung

4. Geeignete Visualisierung und Aggregation der Daten

Aufgabenstellung (15 Pkt.)

Fassen Sie die Daten in einer geeigenten Form zur Beantwortung Ihrer formulierten Fragestellung zusammen. Ziehen Sie auch geeignete Visualisierungen der transformierten und/oder aggregierten Daten heran, um Ihre Aussagen entsprechend zu untermauern oder zu veranschaulichen.

Hier könne Sie auch geeignete statistische Verfahren bzw. Modellierungen nutzen, falls diese Ihnen bezüglich Ihrer Fragestellung weiterhelfen.

  • Welche Klassen von Straftaten werden wie häufig begangen?
    • Anzahl Proportional zu Schweregrad
    • Viele Diebstahle & andere Straftaten um Geld zu beschaffen
  • Welche Stadtteile sind besonders betroffen?
    • Ärmere Stadtteile
    • Stadtteile mit Gang Gebieten

Visualisierung der Crime Arten

Visualisierung der Straftaten auf einer Karte

crimes.df.no_id_theft <- subset(crimes.df, `Crm Cd` != 354)
length(crimes.df.no_id_theft)
[1] 26
crimes.df.no_id_theft <- crimes.df.no_id_theft[1:5000, ]
# Bibliothek laden
library(leaflet)

# Eine interaktive OpenStreetMap-Karte erstellen
leaflet(crimes.df.no_id_theft) %>%
  addTiles() %>%  # Standard-OSM-Karte
  setView(lng = -118.2437, lat = 34.0522, zoom = 9) %>%  # Ansicht auf Los Angeles
  addCircleMarkers(~LON, ~LAT, 
                   radius = 5, 
                   color = "blue", 
                   stroke = FALSE, 
                   fillOpacity = 0.8, 
                   popup = ~paste("ID:", `Crm Cd Desc`))  # Popup mit der DR_NO ID
library(leaflet.extras)

leaflet(crimes.df) %>%
  addTiles() %>%  # Grundkarte hinzufügen
  setView(lng = -118.2437, lat = 34.0522, zoom = 9) %>%
  addHeatmap(
    lng = ~LON,
    lat = ~LAT,
    intensity = nrow(crimes.df),     # Gewichtung (z.B. Anzahl der Vorfälle, falls vorhanden)
    blur = 20,          # Blur-Faktor
    max = 0.05,         # Maximale Intensität
    radius = 10         # Radius für die Heatmap-Punkte
  )

Welche Klassen von Straftaten werden wie häufig begangen?

Welche Stadtteile sind besonders betroffen?

Welche Stadtteile haben besonders viele Straftaten mit Gang Einfluss?

Welche Bevölkerungsgruppe ist am meisten gefährdet? (Abhängig von Alter, Geschlecht, Abstammung)

Gibt es besonders Gefährliche Arten von Orten ([Premise Desc])

Welche Arten von Waffen wird am meisten genutzt?

Wie viel Prozent haben zu Verhaftungen (und welcher Art) geführt?

Gibt es zeitliche Rahmen in denen mehr oder weniger Verbrechen geschehen?

Wie effektiv ist die LAPD bei der Aufklärung verschiedener Arten von Straftaten?

Welche Straftaten werden häufig am Anfang/Ende des Monats begangen?

Wie hat sich die Kriminalität über die 3 Jahre verändert?

Wie häufig werden welche Bevölkerungsgruppen angezeigt / vgl zu wie viele Leute welcher Bevölkerungsgruppe wohnen dort?

5. Zusammenfassung und Schlussfolgerung

Aufgabenstellung (10 Pkt.)

Fassen Sie hier Ihre Fragestellung und Ihre Erkenntnisse aus Ihrer Analyse zusammen.

Sind Ihre Erkenntnisse das, was Sie erwartet haben? Warum oder warum nicht?

Quellenverzeichnis